/*
 * sgc_list.h
 *
 *  Created on: 2011-7-5
 *      Author: rendong01
 */

#ifndef SGC_LIST_H_
#define SGC_LIST_H_

// 列表项
typedef struct _sgc_list_item_s sgc_list_item_t;

struct _sgc_list_item_s{
	void * elts;
	sgc_list_item_t *pre;
	sgc_list_item_t * next;
};

// 列表
typedef struct _sgc_list_s{
	sgc_list_item_t *head;
	sgc_list_item_t *last;
	size_t size;
} sgc_list_t;


/**
 * 创建
 */
sgc_list_t * sgc_list_create();

/**
 * 添加元素到列表尾部
 */
void sgc_list_push(sgc_list_t *list, void *elements);

/**
 * 将尾部元素弹出,并返回元素本身
 */
void * sgc_list_pop(sgc_list_t *list);

/**
 * 将头部元素弹出
 */
void * sgc_list_shift(sgc_list_t *list);

/**
 * 添加元素到列表头部
 */
void sgc_list_unshift(sgc_list_t *list, void *elements);

/**
 * 删除元素
 */
void sgc_list_del(sgc_list_t *list, void *elements);

/**
 * 回收list内存
 */
//void sgc_list_destory(sgc_list_t *list);

/**
 * 对每个元素进行遍历
 */
void sgc_list_foreach(sgc_list_t *list, void *data, void (*handler)(void *elements, int index, void * data));

#endif /* SGC_LIST_H_ */
